home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / bin / rcs-checkin < prev    next >
Text File  |  1994-07-07  |  3KB  |  99 lines

  1. #!/bin/sh
  2.  
  3. # This script accepts any number of file arguments and checks them into RCS.
  4. #
  5. # Arguments which are detectably either RCS masters (with names ending in ,v)
  6. # or Emacs version files  (with names of the form foo.~<number>~) are ignored.
  7. # For each file foo, the script looks for Emacs version files related to it.
  8. # These files are checked in as deltas, oldest first, so that the contents of
  9. # the file itself becomes the latest revision in the master.
  10. #
  11. # The first line of each file is used as its description text.  The file itself
  12. # is not deleted, as under VC with vc-keep-workfiles at its default of t, but
  13. # all the version files are.
  14. #
  15. # If an argument file is already version-controlled under RCS, any version 
  16. # files are added to the list of deltas and deleted, and then the workfile
  17. # is checked in again as the latest version.  This is probably not quite
  18. # what was wanted, and is the main reason VC doesn't simply call this to
  19. # do checkins.
  20. #
  21. # This script is intended to be used to convert files with an old-Emacs-style
  22. # version history for use with VC (the Emacs 19 version-control interface),
  23. # which likes to use RCS as its back end.  It was written by Paul Eggert
  24. # and revised/documented for use with VC by Eric S. Raymond, Mar 19 1993.
  25.  
  26. case $# in
  27. 0)
  28.     echo "rcs-checkin: usage: rcs-checkin file ..."
  29.     echo "rcs-checkin: function: checks file.~*~ and file into a new RCS file"
  30.     echo "rcs-checkin: function: uses the file's first line for the description"
  31. esac
  32.  
  33. # expr pattern to extract owner from ls -l output
  34. ls_owner_pattern='[^ ][^ ]*  *[^ ][^ ]*  *\([^ ][^ ]*\)'
  35.  
  36. for file
  37. do
  38.     # Make it easier to say `rcs-checkin *'
  39.     # by ignoring file names that already contain `~', or end in `,v'.
  40.     case $file in
  41.     *~* | *,v) continue
  42.     esac
  43.     # Ignore non-files too.
  44.     test -f "$file" || continue
  45.  
  46.     # Check that file is readable.
  47.     <$file || exit
  48.  
  49.     # If the RCS file does not already exist,
  50.     # initialize it with a description from $file's first line.
  51.     rlog -R "$file" >/dev/null 2>&1 ||
  52.     rcs -i -q -t-"`sed 1q $file`" "$file" || exit
  53.  
  54.     # Get list of old files.
  55.     oldfiles=`
  56.         ls $file.~[0-9]*~ 2>/dev/null |
  57.         sort -t~ -n +1
  58.     `
  59.  
  60.     # Check that they are properly sorted by date.
  61.     case $oldfiles in
  62.     ?*)
  63.         oldfiles_by_date=`ls -rt $file $oldfiles`
  64.         test " $oldfiles
  65. $file" = " $oldfiles_by_date" || {
  66.             echo >&2 "rcs-checkin: skipping $file, because its mod times are out of order.
  67.  
  68. Sorted by mod time:
  69. $oldfiles_by_date
  70.  
  71. Sorted by name:
  72. $oldfiles
  73. $file"
  74.             continue
  75.         }
  76.     esac
  77.  
  78.     echo >&2 rcs-checkin: checking in: $oldfiles $file
  79.  
  80.     # Save $file as $file.~-~ temporarily.
  81.     mv "$file" "$file.~-~" || exit
  82.  
  83.     # Rename each old file to $file, and check it in.
  84.     for oldfile in $oldfiles
  85.     do
  86.         mv "$oldfile" "$file" || exit
  87.         ls_l=`ls -l "$file"` || exit
  88.         owner=-w`expr " $ls_l" : " $ls_owner_pattern"` || owner=
  89.         echo "Formerly ${oldfile}" | ci -d -l -q $owner "$file" || exit
  90.     done
  91.  
  92.     # Bring $file back from $file.~-~, and check it in.
  93.     mv "$file.~-~" "$file" || exit
  94.     ls_l=`ls -l "$file"` || exit
  95.     owner=-w`expr " $ls_l" : " $ls_owner_pattern"` || owner=
  96.     ci -d -q -u $owner -m"entered into RCS" "$file" || exit
  97. done
  98.  
  99.